/*
 * MyTableModel.java
 *
 * Created on 2 de octubre de 2005, 04:04 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package ig.formato.util;

import ig.formato.dto.VEntidadDTO;
import javax.swing.table.AbstractTableModel;

public class TModelCamposEntidad extends AbstractTableModel {

    private boolean DEBUG = false;
    private boolean[] editables = null;
    private String[] estado = null;
    private String[] estadoAnterior = null;
    private Object[][] object;
    private String[] columnNames = null;
    private Object[][] data = null;
    private boolean delFisico = false;

    public TModelCamposEntidad(Object[][] object, String[] columnNames, boolean[] editables) {
        this.editables = editables;
        this.columnNames = columnNames;
        if (object != null) {
            this.object = object;
        } else {
            this.object = new Object[0][columnNames.length];
        }
        setData(this.object);
    }

    public boolean isDelFisico() {
        return delFisico;
    }

    public String[] getEstado() {
        return estado;
    }

    public void setData(Object[][] _data) {
        if (_data!=null && _data.length==0 || (_data.length > 0  && _data[0][0] instanceof VEntidadDTO)) {
            this.object = _data;
        }
        if (_data != null) {
            data = new Object[_data.length][columnNames.length];
            for (int j = 0; j < columnNames.length; j++) {
                for (int i = 0; i < _data.length; i++) {
                    this.data[i][j] = _data[i][j].toString();
                }
            }
            this.fireTableDataChanged();
        }
    }

    private void copyEstadosNuevos() {
        estadoAnterior = new String[estado.length];
        for (int i = 0; i < estado.length; i++) {
            estadoAnterior[i] = estado[i];
        }
    }

    private void copyEstadosViejos() {
        for (int i = 0; i < estadoAnterior.length; i++) {
            estado[i] = estadoAnterior[i];
        }
        copyEstadosNuevos();
    }
    //super.addTableModelListener()
    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return data.length;
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public boolean isCellEditable(int row, int col) {
        if (editables[col] == true) {
            return true;
        } else {
            return false;
        }
    }

    public Object[][] getData() {
        return this.data;
    }

    public Object[][] getObjet() {
        return this.object;
    }

    public void delete(int row) {
        //Object[][] _data = new Object[this.data.length - 1][this.columnNames.length];
        Object[][] _object = new Object[this.data.length - 1][this.columnNames.length];
        int j = 0;
        for (int i = 0; i < data.length; i++) {
            if (i != row) {
                //_data[j][0] = data[i][0];
                _object[j][0] = object[i][0];
                
                //_data[j][1] = data[i][1];
                _object[j++][1] = ((VEntidadDTO)object[i][0]).getValor();
            }
        }
        setData(_object);
        this.fireTableDataChanged();
    }

    public void setValueAt(Object value, int row, int col) {
        if (DEBUG) {
            System.out.println("Setting value at " + row + "," + col + " to " + value + " (an instance of " + value.getClass() + ")");
        }
        if (col == 0) {
            ((VEntidadDTO) object[row][0]).setNombre(value.toString().trim().replace(" ", "_"));
            data[row][col] = value.toString().trim().replace(" ", "_");
        } else if (col == 1) {
            ((VEntidadDTO) object[row][0]).setValor(value.toString().trim());
            data[row][col] = value.toString().trim();
        }        
        if (DEBUG) {
            System.out.println("New value of data:");
            printDebugData();
        }
        setData(data);
        this.fireTableDataChanged();
    }

    private void printDebugData() {
        int numRows = getRowCount();
        int numCols = getColumnCount();

        for (int i = 0; i < numRows; i++) {
            System.out.print("    row " + i + ":");
            for (int j = 0; j < numCols; j++) {
                System.out.print("  " + data[i][j]);
            }
            System.out.println();
        }
    }
}
